<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>WeakMap对象</title>
</head>
<body>
  <script>
    /**
     * 1. set参数的key只能是对象
     * 2. 没有forEach/for..of方法，不可遍历
     * 3. 没有clear/size，无用变量参数设为null，具有垃圾自动回收机制
    */

    // 1. 没有size属性
    let arr = [1];
    let obj = {a: 1};
    const weakMap = new WeakMap([[arr, 'value']]);
    // 1. set参数的key只能是对象
    weakMap.set(obj, 'obj');
    console.log(weakMap.has(obj)); // true
    console.log(weakMap.has(arr)); // true
    weakMap.delete(arr);
    console.log('weakMap', weakMap);

    // 2. 没有forEach/for..of方法，不可遍历
    // for (const item of weakMap) { // weakMap is not iterable
    //   console.log(item);
    // }
    // weakMap.forEach(element => { // weakMap.forEach is not a function
    //   console.log(element);
    // });

    // 3. 没有clear/size，无用变量参数设为null，具有垃圾自动回收机制
    // console.log('size', weakMap.size); // undefined
    obj = null; // 在控制台打印waekMap，可以看到少了两个对象
  </script>
</body>
</html>